/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function (prices) {
  if (prices.length === 0) return 0
  const dp = Array.from(Array(3), () => new Array(prices.length))
  dp[0].fill(0)
  dp.forEach(Element => Element[0] = 0)   // 将背包dp第一行和列置空
  for (let i = 1; i < 3; i++) { 
    let maxProfit = -prices[0]  // 将第一天负交易价格作为最大利润
    for (let j = 1; j < prices.length; j++) {
      dp[i][j] = Math.max(dp[i][j - 1], prices[j] + maxProfit)   // 当前值为前一天第i次交易价格和当天交易价格的最大值
      maxProfit = Math.max(maxProfit, dp[i - 1][j] - prices[j])  // 若当天的上一次交易减去当天交易价格大于最大利润，则最大利润更新
    }
  }
  return dp[2][prices.length - 1] //返回最后一天最后次交易的值
};

console.log(maxProfit([3, 3, 5, 0, 0, 3, 1, 4]))